package Point.Double;

import org.junit.Test;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * [只可 map 解]
 *      双指针不行 -> 因为 map 处理不了 [3,3] 同 key
 *      int=interger
 */
public class 两数之和1 {
    public int[] twoSum(int[] nums, int target) {
        /*
           [无法实现]

            先排序 后双指针 -> 不行
            因为 map 同 key 索引拿不出 int太难处理
        */
//        // val可重复..
//        Map<Integer, Integer> valIndMap = new HashMap<>();
//        for (int i = 0; i < nums.length; i++) {
//            valIndMap.put(new Integer(nums[i]), i); // [3,3] 不能区分ind 要用Integer
//        }
//        Arrays.sort(nums); // 排序后下标乱了
//
//        int l=0, r=nums.length-1;
//        while(l<r){
//            int L = nums[l], R= nums[r];
//            System.out.println(String.format(
//                    "-> %s %s",
//                    L,R
//            ));
//            if(L+R == target){
//                return new int[]{valIndMap.get(L), valIndMap.get(R)};
//            }else if(L+R > target){
//                r--;
//            }else {
//                l++;
//            }
//        }
//        return null;


        /*
          [唯一方法]
            老Map方法
             -> 初始化 时 放入第一个 巧合 解决了 [3,3] 重复 ！
        */
        // * 放入第一个
        Map<Integer, Integer> valIndMap = new HashMap<>();
        valIndMap.put(nums[0], 0);
        for (int i = 1; i < nums.length; i++) {
            // 要的
            int nedVal = target - nums[i];
            // map中没有 -> 放入当前
            if(!valIndMap.containsKey(nedVal)){
                valIndMap.put(nums[i], i); // [3,3] 竟然可以处理.. --巧合--> 因为 初始rot加入..
            }else{
                return new int[]{valIndMap.get(nums[i]) ,i};
            }
        }
        return null;
    }
    
    @Test
    public void test() {
        int[] ints = twoSum(new int[]{3, 2, 4}, 6);
        System.out.println(1);
    }
}
